﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using DTOMedicalProject;

namespace MRAccesoDatos
{
    public class clsUsuario
    {
        MRAccesoDatosDataContext db = new MRAccesoDatosDataContext();

        public clsUsuario()
        {
            
        }

        public List<DTOUsuario> ObtenerUsuarios()
        {
            int i = 0;
            List<DTOUsuario> dtusuarios = new List<DTOUsuario>();

            try
            {

                var usuario = (from tp in db.Usuarios
                                   select tp).ToList();
   
                foreach (Usuario tUsuario in usuario)
                {
                    dtusuarios.Add(new DTOUsuario());
                    dtusuarios[i].IdUsuario = tUsuario.idUsuario;
                    dtusuarios[i].Nombre = tUsuario.Nombre;
                    dtusuarios[i].Apellido1 = tUsuario.Apellido1;
                    dtusuarios[i].Apellido2 = tUsuario.Apellido2;
                    dtusuarios[i].Direccion = tUsuario.Direccion;
                    dtusuarios[i].Password = tUsuario.Password;
                    dtusuarios[i].CodigoPais = tUsuario.CodigoPais;
                    dtusuarios[i].Cod_Perfil = tUsuario.Cod_Perfil;
                    dtusuarios[i].CodigoProvincia = tUsuario.CodigoProvincia;
                    dtusuarios[i].Cod_Tipo_Afiliacion = tUsuario.Cod_tipo_afiliacion;
                    dtusuarios[i].Cod_Tipo_Usuario = tUsuario.Cod_Tipo_Usuario;
                    dtusuarios[i].Email = tUsuario.Email;


                    i++;
                }


            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrio un error obteniendo los datos. " + ex.Message);
            }

            return dtusuarios;
        }
        
        public DTOUsuario ObtenerUsuarioxId(DTOUsuario usrUsuario)
        {
            DTOUsuario dtUsuario = new DTOUsuario();

            try
            {
                Usuario user = db.Usuarios.Single(p => p.idUsuario == usrUsuario.IdUsuario);

                dtUsuario.IdUsuario = user.idUsuario;
                dtUsuario.Nombre = user.Nombre;
                dtUsuario.Apellido1 = user.Apellido1;
                dtUsuario.Apellido2 = user.Apellido2;
                dtUsuario.Direccion = user.Direccion;
                dtUsuario.Password = user.Password;
                dtUsuario.CodigoPais = user.CodigoPais;
                dtUsuario.Cod_Perfil = user.Cod_Perfil;
                dtUsuario.CodigoProvincia = user.CodigoProvincia;
                dtUsuario.Cod_Tipo_Afiliacion = user.Cod_tipo_afiliacion;
                dtUsuario.Cod_Tipo_Usuario = user.Cod_Tipo_Usuario;
                dtUsuario.Email = user.Email;

                return dtUsuario;

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrio un error obteniendo los datos. " + ex.Message);
            }
        }

        public DTORespuesta InsertarUsuario(DTOUsuario usrUsuario)
        {
            Usuario user = new Usuario();
            DTORespuesta resp = new DTORespuesta();
            
            user.idUsuario = usrUsuario.IdUsuario;
            user.Nombre = usrUsuario.Nombre;
            user.Apellido1 = usrUsuario.Apellido1;
            user.Apellido2 = usrUsuario.Apellido2;
            user.Direccion = usrUsuario.Direccion;
            user.Password = usrUsuario.Password;
            user.CodigoPais = usrUsuario.CodigoPais;
            user.Cod_Perfil = usrUsuario.Cod_Perfil;
            user.CodigoProvincia = usrUsuario.CodigoProvincia;
            user.Cod_tipo_afiliacion = usrUsuario.Cod_Tipo_Afiliacion;
            user.Cod_Tipo_Usuario = usrUsuario.Cod_Tipo_Usuario;
            user.Email = usrUsuario.Email;
            try
            {
                db.Usuarios.InsertOnSubmit(user);
                db.SubmitChanges();

                resp.Codigo = 100;
                resp.Mensaje = "Los datos fueron insertados correctamente.";
                return resp;

            }
            catch (Exception ex)
            {
                resp.Mensaje = ex.Message;
                resp.Codigo = -100;
                return resp;
                // throw new Exception("No se pudo insertar el usuarioe. " + ex.Message);
            }
            finally
            {
                resp = null;
                user = null;
            }
        }

        public DTORespuesta EliminarUsuario(DTOUsuario usrUsuario)
        {
            DTORespuesta resp = new DTORespuesta();
            try
            {
                var usuario = db.Usuarios.Single(p => p.idUsuario == usrUsuario.IdUsuario);
                db.Usuarios.DeleteOnSubmit(usuario);
                db.SubmitChanges();

                resp.Codigo = 101;
                resp.Mensaje = "Los datos fueron eliminados correctamente.";
                return resp;    

            }
            catch (Exception ex)
            {
                resp.Mensaje = ex.Message;
                resp.Codigo = -101;
                return resp;

            }
            finally
            {
                resp = null;
            }
            
        }

        public DTORespuesta ActualizarUsuario (DTOUsuario usrUsuario)
        {
            DTORespuesta resp = new DTORespuesta();
            try
            {
                Usuario user = db.Usuarios.Single(p => p.idUsuario == usrUsuario.IdUsuario);
                user.Nombre = usrUsuario.Nombre;
                user.Apellido1 = usrUsuario.Apellido1;
                user.Apellido2 = usrUsuario.Apellido2;
                user.Direccion = usrUsuario.Direccion;
                user.Password = usrUsuario.Password;
                user.CodigoPais = usrUsuario.CodigoPais;
                user.Cod_Perfil = usrUsuario.Cod_Perfil;
                user.CodigoProvincia = usrUsuario.CodigoProvincia;
                user.Cod_tipo_afiliacion = usrUsuario.Cod_Tipo_Afiliacion;
                user.Cod_Tipo_Usuario = usrUsuario.Cod_Tipo_Usuario;
                user.Email = usrUsuario.Email;

                db.SubmitChanges();

                resp.Codigo = 102;
                resp.Mensaje = "Los datos fueron Actualizados correctamente.";
                return resp;
            }
            catch (Exception ex)
            {
                resp.Mensaje = ex.Message;
                resp.Codigo = -102;
                return resp;
            }
        }
    }
}
